const { DB, Sequelize } = require('../database/DBinit');
const { DataTypes } = Sequelize;
const User = require('./User');
const Tag = require('./Tag');

// 文章表模型
const Article = DB.define(
  'article',
  {
    publishDate: {
      field: 'publishDate',
      type: DataTypes.DATE,
      allowNull: false,
      defaultValue: Sequelize.NOW,
      comment: '发布日期',
    },
    user: {
      field: 'user',
      type: DataTypes.INTEGER,
      allowNull: false,
      comment: '发布人',
      references: {
        model: User,
        key: 'id',
        onDelete: 'CASCADE', // 添加删除约束
        onUpdate: 'CASCADE', // 添加更新约束
      },
    },
    // 多个标签
    tag: {
      field: 'tag',
      type: DataTypes.STRING,
      allowNull: false,
      comment: '标签',
    },
    content: {
      field: 'content',
      type: DataTypes.TEXT,
      defaultValue: '',
      comment: '文章内容',
    },
    title: {
      field: 'title',
      type: DataTypes.STRING(256), // 调整字符串长度为更合理的值
      allowNull: false,
      comment: '标题',
    },
    likeCount: {
      field: 'likeCount',
      type: DataTypes.INTEGER,
      defaultValue: 0,
      comment: '点赞数',
    },
    commentCount: {
      field: 'commentCount',
      type: DataTypes.INTEGER,
      defaultValue: 0,
      comment: '评论数',
    },
    readCount: {
      field: 'readCount',
      type: DataTypes.INTEGER,
      defaultValue: 0,
      comment: '阅读数',
    },
    isTop: {
      field: 'isTop',
      type: DataTypes.BOOLEAN,
      defaultValue: false,
      comment: '是否置顶',
    },
    summary: {
      field: 'summary',
      type: DataTypes.STRING(512), // 调整字符串长度为更合理的值
      defaultValue: '',
      comment: '文章摘要',
    },
    cover: {
      field: 'cover',
      type: DataTypes.STRING,
      defaultValue: '',
      comment: '文章封面',
    },
  },
  {
    timestamps: true,
    updatedAt: true,
    createdAt: true,
    tableName: 'article',
    comment: '文章表',
  }
);

// 一篇博客只能属于一个用户
Article.belongsTo(User, {
  foreignKey: 'user', // 映射键
  targetKey: 'id', // 目标键
  as: 'userinfo', // 别名
});

// Article.hasMany(Tag, {
//   sourceKey: 'tag', // 映射键
//   foreignKey: 'value', // 目标键
//   as: 'tags', // 别名
// });

module.exports = Article;
